In a distributed database, one way of improving performance is by horizontally partitioning database tables into smaller components. For example, by distributing selected rows from the database tables across multiple database servers, the number of rows in each partition may be reduced. This may decrease the size of database indexes, which may improve search performance. Each horizontal partition can form part of a “shard” that in turn can be housed on different host machines located in one or more geographic locations. Typically, a client can access and update a current state of the shards by requesting a series of read/write transactions. However, causal inconsistencies in executing the transactions can occur.